Skip to content

ci(markdownlint): broaden research carve-out to non-Amara verbatim ferries (unblocks PR #19)#79

Merged
AceHack merged 1 commit intomainfrom
fix/markdownlint-research-date-prefix-carveout-2026-04-28
Apr 28, 2026
Merged

ci(markdownlint): broaden research carve-out to non-Amara verbatim ferries (unblocks PR #19)#79
AceHack merged 1 commit intomainfrom
fix/markdownlint-research-date-prefix-carveout-2026-04-28

Conversation

@AceHack
Copy link
Copy Markdown
Owner

@AceHack AceHack commented Apr 28, 2026

Summary

Extends the docs/research/2026-*-amara-*.md ignore pattern (added in PR #76) to docs/research/2026-*-*.md — covering any ferry source (Amara, Gemini, Grok, Codex, Aaron-quoted, etc.) landing as a date-prefixed verbatim absorb.

Why

PR #76 unblocked 6 stale PRs but PR #19 still failed on:

  • docs/research/2026-04-26-gemini-deep-think-agencysignature-commit-attribution-convention-validation-and-refinement.md (Gemini ferry)
  • docs/research/2026-04-26-action-mode-classification-correction-and-self-provenance-accountability-framing.md (Aaron + Otto + Gemini verbatim quotes)

Both files have GOVERNANCE §33 archive headers (Operational status: research-grade) and verbatim-quote sections — same class as Amara ferries, just different source names. The Amara-only scoping was too narrow.

Repo convention encoded

  • 2026-MM-DD-<source-or-topic>-*.md (date PREFIX) → verbatim absorb → covered
  • <topic>-...-2026-MM-DD.md (date SUFFIX) → author-controlled → still linted
  • Non-date names → author-controlled → still linted

The discriminator is date-position, not source name.

Note on PR #23

PR #23 (amara-ferry-12) failed today on a separate transient GitHub releases CDN 502 downloading bun-1.3.13 (mise install step, NOT markdownlint). Per feedback_transient_ci_external_infra_only_test_failures_are_bugs_not_flakes_2026_04_28.md: external-infra failures get reruns, not config fixes. Will rerun #23 after this PR lands.

Test plan

🤖 Generated with Claude Code

…tim ferries

PR #19 surfaced a scope gap in PR #76's docs/research/2026-*-amara-*.md
carve-out: gemini-deep-think + action-mode verbatim ferry files have
the same MD027/MD032 violations on Amara-style verbatim-quote blocks
but use non-Amara source names.

Extends pattern to docs/research/2026-*-*.md — covers any ferry
source landing as a date-prefixed absorb file. Repo convention:
2026-MM-DD-<source-or-topic>-*.md = verbatim absorbs (carry §33
archive headers + "## Verbatim preservation" sections);
non-date-prefixed names + date-SUFFIXED names = author-controlled
research docs that stay linted.

Trade-off documented in the comment block: a non-ferry doc
accidentally landing with date-prefix shape would skip lint.
Cost is small (markdown-only) vs the cost of churning verbatim
courier-protocol content per Otto-227.

Unblocks PR #19 (gemini-deep-think + action-mode verbatim).
PR #21 + PR #24 still pending CI; PR #23 was a separate transient
GitHub releases CDN 502 on bun-1.3.13 download — needs rerun
not config fix per Aaron 2026-04-28 transient-CI-external-infra
discipline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 28, 2026 05:29
@AceHack AceHack enabled auto-merge (squash) April 28, 2026 05:29
@AceHack AceHack merged commit 86a12e7 into main Apr 28, 2026
17 checks passed
@AceHack AceHack deleted the fix/markdownlint-research-date-prefix-carveout-2026-04-28 branch April 28, 2026 05:31
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates markdownlint’s ignore configuration to treat all date-prefixed docs/research/2026-*-*.md files as verbatim “ferry/absorb” artifacts (not just Amara-sourced ones), unblocking markdownlint failures for non-Amara research ferries.

Changes:

  • Broadens the ignore glob from docs/research/2026-*-amara-*.md to docs/research/2026-*-*.md.
  • Expands the accompanying rationale comment to document the date-prefix discriminator and trade-offs.

Comment thread .markdownlint-cli2.jsonc
Comment on lines +89 to +96
// verbatim courier-protocol absorbs; they carry "## Verbatim
// preservation" sections + GOVERNANCE §33 archive headers
// (Scope / Attribution / Operational status: research-grade /
// Non-fusion disclaimer). Author-controlled research docs use
// non-date-prefixed names (e.g. `actor-model-*.md`,
// `agent-cadence-log.md`) or date-SUFFIXED names (e.g.
// `aaron-knative-...-2026-04-21.md`) — date-prefix vs
// date-suffix is the discriminator.
Copy link

Copilot AI Apr 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says date-prefixed docs/research/ absorbs “carry "## Verbatim preservation" sections”, but a repo-wide search shows no Verbatim preservation heading/text under docs/research/** (it exists under docs/aurora/**). This makes the rationale misleading; consider rewording to point at the actual invariant these files share (e.g., the GOVERNANCE §33 boundary header/frontmatter + verbatim blocks), rather than a section title that doesn’t exist here.

Suggested change
// verbatim courier-protocol absorbs; they carry "## Verbatim
// preservation" sections + GOVERNANCE §33 archive headers
// (Scope / Attribution / Operational status: research-grade /
// Non-fusion disclaimer). Author-controlled research docs use
// non-date-prefixed names (e.g. `actor-model-*.md`,
// `agent-cadence-log.md`) or date-SUFFIXED names (e.g.
// `aaron-knative-...-2026-04-21.md`) — date-prefix vs
// date-suffix is the discriminator.
// verbatim courier-protocol absorbs; they carry the
// GOVERNANCE §33 archive boundary/frontmatter
// (Scope / Attribution / Operational status: research-grade /
// Non-fusion disclaimer) plus verbatim preserved blocks.
// Author-controlled research docs use non-date-prefixed names
// (e.g. `actor-model-*.md`, `agent-cadence-log.md`) or
// date-SUFFIXED names (e.g. `aaron-knative-...-2026-04-21.md`)
// — date-prefix vs date-suffix is the discriminator.

Copilot uses AI. Check for mistakes.
Comment thread .markdownlint-cli2.jsonc
// date-prefix shape would skip lint; the cost of that miss is
// small (research docs are markdown only) compared to the
// cost of churning verbatim ferry content.
"docs/research/2026-*-*.md"
Copy link

Copilot AI Apr 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ignore glob docs/research/2026-*-*.md is broader than the documented “2026-MM-DD-... date-PREFIX” discriminator: it will also match filenames like 2026-04-topic.md (year-month) if any are added later. To keep the carve-out scoped to full dates as intended, use a pattern that encodes the day as well (e.g., 2026-??-??-*.md or an equivalent digit-class glob supported by markdownlint-cli2).

Suggested change
"docs/research/2026-*-*.md"
"docs/research/2026-??-??-*.md"

Copilot uses AI. Check for mistakes.
Comment thread .markdownlint-cli2.jsonc
Comment on lines +79 to +85
// Verbatim-ferry preservation under `docs/research/` for any
// ferry source (Amara, Gemini, Grok, Codex, Aaron-quoted, etc.)
// landing as a date-stamped absorb file. Original carve-out was
// `docs/research/2026-*-amara-*.md` which only covered Amara
// ferries; PR #19 (gemini-deep-think + action-mode verbatim
// Aaron-quote files) exposed the Amara-only scoping as too
// narrow.
Copy link

Copilot AI Apr 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This new comment block introduces personal-name attribution on a current-state config surface (e.g., “Aaron-quoted”, “Aaron-quote files”). Repo guidance is to use role references outside the history-surface paths (see docs/AGENT-BEST-PRACTICES.md:284-325). Consider rewriting these references to role-refs (e.g., “human-maintainer-quoted”) to stay consistent with that convention.

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request Apr 28, 2026
…26-04-28) (#80)

Three structural fixes for the PR #23 mise+bun-1.3.13 502 transient
class, addressing Aaron 2026-04-28 directives:

  "is there not a way to fix this?" (don't default to rerun)
  "we want to use stock and we better not be using that old
   version of ubuntu"
  "can you cache and retry?"
  "we want to make sure dev seutp and build machine setup are as
   close to the same a possible"
  "why not cache the whole install/setup"

1. **Comprehensive install cache** on lint-shell, lint-workflows,
   lint-markdown jobs (previously uncached). Caches everything
   tools/setup/install.sh writes:
     ~/.local/bin/mise (the mise binary)
     ~/.local/share/mise (mise runtimes — bun/dotnet/python/uv/java)
     ~/.cache/mise (mise download cache)
     ~/.dotnet/tools (dotnet global tools)
     ~/.elan (Lean toolchain)
     ~/.config/zeta (managed shellenv)
     tools/tla, tools/alloy (verifier jars)
   Cache key hashes BOTH .mise.toml AND tools/setup/** so install
   logic changes invalidate cache → vanilla install path gets
   re-tested whenever discipline changes.

2. **Retry layer** on the install step (CI-only — dev runs stay
   interactive). Three attempts with 10s/30s backoff. Mise's
   internal 3-attempt retry was exhausted on PR #23's bun download;
   wrapping at the install.sh layer catches the case where mise
   itself gives up. Same shape across all 3 lint jobs.

3. **Ubuntu 24.04 bump** on every workflow that pinned ubuntu-22.04
   (gate.yml lint jobs ×6, resume-diff.yml, scorecard.yml,
   memory-index-duplicate-lint.yml, budget-snapshot-cadence.yml).
   ubuntu-latest = ubuntu-24.04 since Jan 2025 per Otto-247 WebSearch
   verification; 22.04 is now LTS-2 stale. Stays on stock GitHub-
   hosted runner image (no custom pre-installed bun) per Aaron's
   "we want to use stock" + "vanilla ubuntu so we test do our install
   scripts work on vanalla and deve machines."

Dev↔CI parity: install.sh runs on both surfaces; cache restores
state similar to a dev's already-bootstrapped local env; cache key
on tools/setup/** + .mise.toml matches what a dev's environment
depends on. install.sh stays idempotent so cache hit = fast no-op,
cache miss = full vanilla install (which is the install-script
validation Aaron wants).

Composes with PR #75 curl_fetch helper (downstream curl retries),
PR #76 + #79 markdownlint carve-outs (verbatim ferry preservation),
Otto-247 version-currency, Otto-235 4-shell portability, Otto-341
mechanism-over-vigilance, and `feedback_structural_fix_beats_process_discipline_velocity_multiplier_aaron_2026_04_28.md`.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 28, 2026
* ci: comprehensive install cache + retry + ubuntu-24.04 bump (Aaron 2026-04-28)

Three structural fixes for the PR #23 mise+bun-1.3.13 502 transient
class, addressing Aaron 2026-04-28 directives:

  "is there not a way to fix this?" (don't default to rerun)
  "we want to use stock and we better not be using that old
   version of ubuntu"
  "can you cache and retry?"
  "we want to make sure dev seutp and build machine setup are as
   close to the same a possible"
  "why not cache the whole install/setup"

1. **Comprehensive install cache** on lint-shell, lint-workflows,
   lint-markdown jobs (previously uncached). Caches everything
   tools/setup/install.sh writes:
     ~/.local/bin/mise (the mise binary)
     ~/.local/share/mise (mise runtimes — bun/dotnet/python/uv/java)
     ~/.cache/mise (mise download cache)
     ~/.dotnet/tools (dotnet global tools)
     ~/.elan (Lean toolchain)
     ~/.config/zeta (managed shellenv)
     tools/tla, tools/alloy (verifier jars)
   Cache key hashes BOTH .mise.toml AND tools/setup/** so install
   logic changes invalidate cache → vanilla install path gets
   re-tested whenever discipline changes.

2. **Retry layer** on the install step (CI-only — dev runs stay
   interactive). Three attempts with 10s/30s backoff. Mise's
   internal 3-attempt retry was exhausted on PR #23's bun download;
   wrapping at the install.sh layer catches the case where mise
   itself gives up. Same shape across all 3 lint jobs.

3. **Ubuntu 24.04 bump** on every workflow that pinned ubuntu-22.04
   (gate.yml lint jobs ×6, resume-diff.yml, scorecard.yml,
   memory-index-duplicate-lint.yml, budget-snapshot-cadence.yml).
   ubuntu-latest = ubuntu-24.04 since Jan 2025 per Otto-247 WebSearch
   verification; 22.04 is now LTS-2 stale. Stays on stock GitHub-
   hosted runner image (no custom pre-installed bun) per Aaron's
   "we want to use stock" + "vanilla ubuntu so we test do our install
   scripts work on vanalla and deve machines."

Dev↔CI parity: install.sh runs on both surfaces; cache restores
state similar to a dev's already-bootstrapped local env; cache key
on tools/setup/** + .mise.toml matches what a dev's environment
depends on. install.sh stays idempotent so cache hit = fast no-op,
cache miss = full vanilla install (which is the install-script
validation Aaron wants).

Composes with PR #75 curl_fetch helper (downstream curl retries),
PR #76 + #79 markdownlint carve-outs (verbatim ferry preservation),
Otto-247 version-currency, Otto-235 4-shell portability, Otto-341
mechanism-over-vigilance, and `feedback_structural_fix_beats_process_discipline_velocity_multiplier_aaron_2026_04_28.md`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* ci: bump install retry from 3 to 5 attempts with 10s/30s/60s/120s backoff (Aaron 2026-04-28)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 29, 2026
…+ retry 3→5 (Aaron 2026-04-28) (Lucent-Financial-Group#700)

* ci: comprehensive install cache + retry + ubuntu-24.04 bump (Aaron 2026-04-28) (#80)

Three structural fixes for the PR #23 mise+bun-1.3.13 502 transient
class, addressing Aaron 2026-04-28 directives:

  "is there not a way to fix this?" (don't default to rerun)
  "we want to use stock and we better not be using that old
   version of ubuntu"
  "can you cache and retry?"
  "we want to make sure dev seutp and build machine setup are as
   close to the same a possible"
  "why not cache the whole install/setup"

1. **Comprehensive install cache** on lint-shell, lint-workflows,
   lint-markdown jobs (previously uncached). Caches everything
   tools/setup/install.sh writes:
     ~/.local/bin/mise (the mise binary)
     ~/.local/share/mise (mise runtimes — bun/dotnet/python/uv/java)
     ~/.cache/mise (mise download cache)
     ~/.dotnet/tools (dotnet global tools)
     ~/.elan (Lean toolchain)
     ~/.config/zeta (managed shellenv)
     tools/tla, tools/alloy (verifier jars)
   Cache key hashes BOTH .mise.toml AND tools/setup/** so install
   logic changes invalidate cache → vanilla install path gets
   re-tested whenever discipline changes.

2. **Retry layer** on the install step (CI-only — dev runs stay
   interactive). Three attempts with 10s/30s backoff. Mise's
   internal 3-attempt retry was exhausted on PR #23's bun download;
   wrapping at the install.sh layer catches the case where mise
   itself gives up. Same shape across all 3 lint jobs.

3. **Ubuntu 24.04 bump** on every workflow that pinned ubuntu-22.04
   (gate.yml lint jobs ×6, resume-diff.yml, scorecard.yml,
   memory-index-duplicate-lint.yml, budget-snapshot-cadence.yml).
   ubuntu-latest = ubuntu-24.04 since Jan 2025 per Otto-247 WebSearch
   verification; 22.04 is now LTS-2 stale. Stays on stock GitHub-
   hosted runner image (no custom pre-installed bun) per Aaron's
   "we want to use stock" + "vanilla ubuntu so we test do our install
   scripts work on vanalla and deve machines."

Dev↔CI parity: install.sh runs on both surfaces; cache restores
state similar to a dev's already-bootstrapped local env; cache key
on tools/setup/** + .mise.toml matches what a dev's environment
depends on. install.sh stays idempotent so cache hit = fast no-op,
cache miss = full vanilla install (which is the install-script
validation Aaron wants).

Composes with PR #75 curl_fetch helper (downstream curl retries),
PR #76 + #79 markdownlint carve-outs (verbatim ferry preservation),
Otto-247 version-currency, Otto-235 4-shell portability, Otto-341
mechanism-over-vigilance, and `feedback_structural_fix_beats_process_discipline_velocity_multiplier_aaron_2026_04_28.md`.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* ci: bump install retry from 3 to 5 attempts (Aaron 2026-04-28) (#81)

* ci: comprehensive install cache + retry + ubuntu-24.04 bump (Aaron 2026-04-28)

Three structural fixes for the PR #23 mise+bun-1.3.13 502 transient
class, addressing Aaron 2026-04-28 directives:

  "is there not a way to fix this?" (don't default to rerun)
  "we want to use stock and we better not be using that old
   version of ubuntu"
  "can you cache and retry?"
  "we want to make sure dev seutp and build machine setup are as
   close to the same a possible"
  "why not cache the whole install/setup"

1. **Comprehensive install cache** on lint-shell, lint-workflows,
   lint-markdown jobs (previously uncached). Caches everything
   tools/setup/install.sh writes:
     ~/.local/bin/mise (the mise binary)
     ~/.local/share/mise (mise runtimes — bun/dotnet/python/uv/java)
     ~/.cache/mise (mise download cache)
     ~/.dotnet/tools (dotnet global tools)
     ~/.elan (Lean toolchain)
     ~/.config/zeta (managed shellenv)
     tools/tla, tools/alloy (verifier jars)
   Cache key hashes BOTH .mise.toml AND tools/setup/** so install
   logic changes invalidate cache → vanilla install path gets
   re-tested whenever discipline changes.

2. **Retry layer** on the install step (CI-only — dev runs stay
   interactive). Three attempts with 10s/30s backoff. Mise's
   internal 3-attempt retry was exhausted on PR #23's bun download;
   wrapping at the install.sh layer catches the case where mise
   itself gives up. Same shape across all 3 lint jobs.

3. **Ubuntu 24.04 bump** on every workflow that pinned ubuntu-22.04
   (gate.yml lint jobs ×6, resume-diff.yml, scorecard.yml,
   memory-index-duplicate-lint.yml, budget-snapshot-cadence.yml).
   ubuntu-latest = ubuntu-24.04 since Jan 2025 per Otto-247 WebSearch
   verification; 22.04 is now LTS-2 stale. Stays on stock GitHub-
   hosted runner image (no custom pre-installed bun) per Aaron's
   "we want to use stock" + "vanilla ubuntu so we test do our install
   scripts work on vanalla and deve machines."

Dev↔CI parity: install.sh runs on both surfaces; cache restores
state similar to a dev's already-bootstrapped local env; cache key
on tools/setup/** + .mise.toml matches what a dev's environment
depends on. install.sh stays idempotent so cache hit = fast no-op,
cache miss = full vanilla install (which is the install-script
validation Aaron wants).

Composes with PR #75 curl_fetch helper (downstream curl retries),
PR #76 + #79 markdownlint carve-outs (verbatim ferry preservation),
Otto-247 version-currency, Otto-235 4-shell portability, Otto-341
mechanism-over-vigilance, and `feedback_structural_fix_beats_process_discipline_velocity_multiplier_aaron_2026_04_28.md`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* ci: bump install retry from 3 to 5 attempts with 10s/30s/60s/120s backoff (Aaron 2026-04-28)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* ci: address PR Lucent-Financial-Group#700 Copilot threads + Otto-357 no-directives correction (5 fixes)

Five fixes in gate.yml addressing Copilot review threads + the human
maintainer's reinforcement of Otto-357 (no-directives framing):

## 1. Otto-357 no-directives framing (4 spots)

The human maintainer's catch: "the only directive is there is no
directive". Per Otto-357 + the no-directives rule in CLAUDE.md,
framing the maintainer's input as "directive" makes Otto a follower-
of-orders rather than an accountable autonomous peer. Replaced 4
occurrences of "the human maintainer's directive" / "Aaron 2026-04-28
directive" with "the human maintainer's input" / "the human
maintainer's 2026-04-28 input" / "dev-CI parity input" / etc.

## 2. Aaron→role-ref attribution (Otto-279 thread)

Per Otto-279 / the named-agent attribution rule, current-state
surfaces (workflows count) use role-refs ("the human maintainer")
not first-name attribution. Converted in the comments I introduced
or just edited; pre-existing Aaron-named comments left as-is for
scope hygiene.

## 3. Comprehensive install cache: drop tools/tla + tools/alloy

The cache key only hashed `.mise.toml + tools/setup/** + global.json`,
but the cache PATHS included `tools/tla` and `tools/alloy` — which
contain tracked source (e.g., `tools/alloy/AlloyRunner.java`,
first-party Java) AND are already cached by the dedicated "Cache
verifier jars (TLC + Alloy)" step earlier in the workflow. Caching
them in the comprehensive cache caused (a) double-cache races and
(b) cache-hit-but-stale on tracked-source edits (the cache key
wouldn't bust). Drop those paths; rely on the dedicated verifier-
jars cache for them.

## 4. Typo cleanup in directive-quote comments

"dev seutp" → "dev setup", "as close to the same a possible" →
"as close to the same as possible". Tension with verbatim-quote
substrate resolved by paraphrasing in the comment (the quoted
form is preserved in memory files; workflow comments are
current-state, prefer readable).

## 5. PR description over-claim — Setup Python step

The PR description claimed "Setup Python + Install Semgrep
(lint job)". Investigation showed the lint (semgrep) job uses
the install.sh-based pattern (no actions/setup-python) per the
host-portability invariant. The Setup Python addition from
AceHack #80 did NOT survive the cherry-pick because LFG-side
already moved to install.sh-based semgrep. PR description will
be corrected separately. The cache + retry are the real
substantive forward-sync content.

Retry-wrapper duplication suggestion (Copilot thread #3) noted
as a follow-up improvement candidate in-comment; not addressed
in this PR to keep scope tight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants